home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.internal;
-
- import com.ibm.xml.framework.ChunkyByteArray;
- import com.ibm.xml.framework.ParserState;
- import com.ibm.xml.framework.StringPool;
- import com.ibm.xml.framework.XMLDeclRecognizer;
- import com.ibm.xml.framework.XMLEntityHandler;
- import com.ibm.xml.framework.XMLReader;
- import java.io.File;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.Stack;
- import org.xml.sax.EntityResolver;
- import org.xml.sax.InputSource;
-
- public final class DefaultEntityHandler implements XMLEntityHandler {
- private static final boolean DEBUG = false;
- private Stack fRecognizers;
- private Stack fInputSourceStack;
- private ParserState fParserState;
- private EntityResolver fResolver;
-
- public DefaultEntityHandler(ParserState var1) {
- this.fParserState = var1;
- this.fInputSourceStack = new Stack();
- this.initializeRecognizers();
- }
-
- public void reset(ParserState var1) {
- this.fParserState = var1;
- this.fInputSourceStack.removeAllElements();
- }
-
- public void addRecognizer(XMLDeclRecognizer var1) {
- this.fRecognizers.push(var1);
- }
-
- public void setEntityResolver(EntityResolver var1) {
- this.fResolver = var1;
- }
-
- public EntityResolver getEntityResolver() {
- return this.fResolver;
- }
-
- public InputSource resolveEntity(int var1, int var2) throws Exception {
- EntityResolver var3 = this.fResolver;
- if (var3 != null) {
- StringPool var4 = this.fParserState.getStringPool();
- String var5 = var4.toString(var1);
- String var6 = var4.toString(var2);
- return var3.resolveEntity(var5, var6);
- } else {
- return null;
- }
- }
-
- public int expandSystemId(int var1) {
- if (var1 != -1) {
- ParserState var2 = this.fParserState;
- StringPool var3 = var2.getStringPool();
-
- try {
- String var4 = var3.toString(var1);
- URL var5 = this.expandSystemId(var4);
- if (var5 != null) {
- return var3.addString(var5.toString());
- }
- } catch (Exception var6) {
- }
- }
-
- return var1;
- }
-
- public XMLReader createReader(InputSource var1, boolean var2) throws Exception {
- if (var1.getCharacterStream() != null) {
- return new CharReader(this.fParserState, var1.getPublicId(), var1.getSystemId(), var1.getCharacterStream());
- } else if (var1.getEncoding() != null && var1.getByteStream() != null) {
- return new CharReader(this.fParserState, var1.getPublicId(), var1.getSystemId(), new InputStreamReader(var1.getByteStream(), var1.getEncoding()));
- } else {
- InputStream var3 = var1.getByteStream();
- if (var3 == null) {
- try {
- String var4 = var1.getSystemId();
- if (var4 != null) {
- try {
- ParserState var5 = this.fParserState;
- StringPool var6 = var5.getStringPool();
- int var7 = var6.addString(var4);
- int var8 = var5.getEntityHandler().expandSystemId(var7);
- if (var7 != var8) {
- var4 = var6.orphanString(var8);
- var1.setSystemId(var4);
- }
-
- var6.releaseString(var7);
- } catch (Exception var9) {
- }
- }
-
- URL var12 = new URL(var4);
- var3 = var12.openStream();
- } catch (Exception var10) {
- throw var10;
- }
- }
-
- ChunkyByteArray var11 = new ChunkyByteArray(var3);
- Object var13 = this.callRecognizers(var1, var2, var11);
- if (var13 == null) {
- ParserState var14 = this.fParserState;
- if (true) {
- var13 = new UTF8CharReader(this.fParserState, var1.getPublicId(), var1.getSystemId(), var11);
- } else {
- var13 = new UTF8Reader(this.fParserState, var1.getPublicId(), var1.getSystemId(), var11);
- }
- }
-
- return (XMLReader)var13;
- }
- }
-
- public void startInputSource(InputSource var1) {
- this.fInputSourceStack.push(var1);
- }
-
- public void endInputSource(InputSource var1) {
- InputSource var2 = (InputSource)this.fInputSourceStack.pop();
- if (var2 != var1) {
- try {
- this.fParserState.getErrorHandler().error(170);
- } catch (Exception var3) {
- }
- }
- }
-
- public URL expandSystemId(String var1) throws Exception {
- if (var1 == null) {
- var1 = "/";
- }
-
- try {
- URL var2 = new URL(var1);
- if (var2 != null) {
- return null;
- }
- } catch (MalformedURLException var7) {
- }
-
- var1 = fixURI(var1);
-
- String var9;
- try {
- InputSource var3 = (InputSource)this.fInputSourceStack.peek();
- var9 = var3.getSystemId();
- } catch (Exception var6) {
- var9 = null;
- }
-
- Object var10 = null;
- URL var11;
- if (var9 == null) {
- String var4;
- try {
- var4 = fixURI(System.getProperty("user.dir"));
- } catch (SecurityException var5) {
- var4 = "";
- }
-
- if (!var4.endsWith("/")) {
- var4 = var4 + "/";
- }
-
- var11 = new URL("file", "", var4);
- } else {
- var11 = new URL(var9);
- }
-
- return new URL(var11, var1);
- }
-
- private void initializeRecognizers() {
- if (this.fRecognizers == null) {
- this.fRecognizers = new Stack();
- this.fRecognizers.push(new EBCDICRecognizer());
- this.fRecognizers.push(new UCSRecognizer());
- this.fRecognizers.push(new UTF8Recognizer());
- }
-
- }
-
- private XMLReader callRecognizers(InputSource var1, boolean var2, ChunkyByteArray var3) throws Exception {
- for(int var4 = this.fRecognizers.size() - 1; var4 >= 0; --var4) {
- XMLDeclRecognizer var5 = (XMLDeclRecognizer)this.fRecognizers.elementAt(var4);
- XMLReader var6 = var5.recognize(this.fParserState, var1, var3, var2);
- if (var6 != null) {
- return var6;
- }
- }
-
- return null;
- }
-
- private static String fixURI(String var0) {
- var0 = var0.replace(File.separatorChar, '/');
- if (var0.length() >= 2) {
- char var1 = var0.charAt(1);
- if (var1 == ':') {
- char var2 = Character.toUpperCase(var0.charAt(0));
- if (var2 >= 'A' && var2 <= 'Z') {
- var0 = "/" + var0;
- }
- }
- }
-
- return var0;
- }
- }
-